昨天我們將新增的功能寫好了,今天要來繼續來將讀取的功能來實作出來~
我們回到 repository/album.go
,這邊我預想讀取的情況有兩種
下面就來分別實作出來吧
透過 GORM 提供的 Where
進行 id 欄位的 Query 查詢,並取第一筆資料進行回傳
// Read 透過 id 讀取指定單筆資料
func Read(id string) (database.Album, error) {
var a database.Album
result := database.DB.Where("id = ?", id).First(&a)
return a, result.Error
}
透過 GORM 提供的 Find
撈取 Album struct
(也就是資料庫內的 Album 資料表) 全部的資料,並回傳
// ReadAll 讀取全部資料
func ReadAll() ([]database.Album, error) {
var albums []database.Album
result := database.DB.Find(&albums)
return albums, result.Error
}
回到 main.go
package main
import (
"demo/database"
"demo/repository"
"fmt"
"github.com/google/uuid"
)
func main() {
database.ConnectDB()
album := database.Album{
ID: uuid.New().String(),
Title: "The Modern Sound of Betty Carter",
Artist: "Betty Carter",
ReleaseDate: "1960",
}
err := repository.Create(album)
if err != nil {
panic(err)
}
// 讀取 Album 資料表內全部的資料
albums, err := repository.ReadAll()
// 判定錯誤是否為 gorm.ErrRecordNotFound 查無資料
// 是的話,輸出 No record found,否則輸出報錯
if errors.Is(err, gorm.ErrRecordNotFound) {
fmt.Println("No record found")
} else if err != nil {
panic(err)
}
fmt.Println(albums)
// 透過指定 id 從資料庫讀取指定資料
album, err = repository.Read(album.ID)
// 判定錯誤是否為 gorm.ErrRecordNotFound 查無資料
// 是的話,輸出 No record found,否則輸出報錯
if errors.Is(err, gorm.ErrRecordNotFound) {
fmt.Println("No record found")
} else if err != nil {
panic(err)
}
fmt.Println(album)
}
執行後,就可以看到從 SQL 資料庫內讀取到的資料了~
以上 Sample Code 可以在我 GitHub 上找到
https://github.com/leoho0722/it15th
今天我們透過 GORM 來實作向 SQL 資料庫進行讀取資料
明天要來介紹如何透過 GORM 來向 SQL 資料庫進行資料更新的操作
明天見~